package com.example.interview.algorithm;

import java.util.Arrays;

/**
 * 
 * @Description: TODO
 * @author gaobing
 * @date 2018年9月27日 下午3:11:01
 * 替换空格
 * 请实现一个函数，把字符串中的每个空格替换成"%20"，例如“We are happy.“，则输出”We%20are%20happy.“。
 *  
 * 解题思路：把字符串转成 char数组 从后面移动字符 char[]数组容量要足够大，至少能容纳转换后的字符
 */
public class Test05ReplaceEmpty {

	private static String replaceBlank(char[] string, int usedLength) {
		
		//判断输入的合法性
		if (string==null||string.length<usedLength) {
			return "";
		}
		//统计字符数组中的空白字符
		int whiteCount=0;
		for(int i=0;i<usedLength;i++) {
			if (string[i]==' ') {
				whiteCount++;
			}
		}
		//如果没有空格返回
		if (whiteCount==0) {
			return String.valueOf(string);
		}
		//计算转换后的字符长度，替换一个增加2个  ' ' %20
		int targetLength=whiteCount*2+usedLength;
		if (targetLength>string.length) {
			return "";//如果转换后的长度大于数组的长度，返回失败
		}
		
		usedLength--;//从后向前 ，第一个开始处理的字符
		targetLength--;//处理后字符放置的位置
		
		while(usedLength>=0&&usedLength<targetLength) {
			//如果当前字符是空格，进行%20替换
			if (string[usedLength]==' ') {
				string[targetLength--]='0';
				string[targetLength--]='2';
				string[targetLength--]='%';
			}else {
				//否则移动字符
				string[targetLength--]=string[usedLength];
			}
			usedLength--;
		}
		return String.valueOf(string);
	}
	
	public static void main(String[] args) {
		
		String string2="we are happy!";
		System.out.println(replaceBlank(string2));
	}

	private static String replaceBlank(String string2) {
		  
		 char[] chars=string2.toCharArray();
		 System.out.println(chars.hashCode());

		 char[] newchars=new char[100];
		 newchars=chars;
		 System.out.println(newchars.hashCode());
		 if (chars==newchars) {
			System.out.println("equal");
		}
	     chars=Arrays.copyOf(chars, chars.length*4);
		 System.out.println(chars.hashCode());
		 if (chars==newchars) {
			 System.out.println("equal"); 
		}else {
			System.out.println("not equal");
		}
		 return replaceBlank(chars, string2.length());
	}

	
 
}
